//
// Copyright (c) 2024 BPer
//

#ifndef SRC_BPERRTC_BPERRTCCONNECTION_H_
#define SRC_BPERRTC_BPERRTCCONNECTION_H_

#include <bperrtc/BPerRtcContext.h>
#include <bperrtc/BPerRtcSession.h>

#include <bperrtp/BPerRtpPacket.h>
#include <bperrtp/BPerRtpRecvNack.h>
#include <bperrtp/BPerReceiveNackBuffer.h>

#include <bperutil/sys/BPerTime.h>

int32_t bPer_send_rtcppacket(BPerRtcContext *context, char *data, int32_t nb);
void bPer_do_request_keyframe(BPerRtcContext* context,uint32_t ssrc);
int32_t bPer_send_rtcp_fb_pli(BPerRtcContext* context,uint32_t ssrc);
int32_t bPer_send_rtcp_fb_twcc(BPerRtcContext *context, BPerRecvTWCC* twcc,int32_t twcc_fb_count);
int32_t bPer_send_rtcp_rr(BPerRtcContext* context,BPerBool isAudio,uint32_t ssrc, BPerReceiveNackBuffer *rtp_queue,
		const uint64_t last_send_systime,  BPerNtp* last_send_ntp);
int32_t bPer_send_rtcp_sr(BPerRtcContext *context, BPerBool isAudio,uint32_t ssrc);
int32_t bPer_send_rtcp_xr_rrtr(BPerRtcContext* context,uint32_t ssrc);
int32_t bPer_check_send_nacks(BPerRtcContext* context,BPerRtpRecvNack *nack, uint32_t ssrc,
		uint32_t *sent_nacks, uint32_t *timeout_nacks) ;

#endif /* SRC_BPERRTC_BPERRTCCONNECTION_H_ */
